package com.killLog.common.page;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.Data;
import java.util.List;

/**
用来封装分页相关信息（和前端交互的实体类）
*/
@Data
public class Page<T> {
    private int current;//当前页码
    private int pre;//上一页
    private int next;//下一页
    private int first;//首页
    private int last;//尾页
    private int total;//总记录数
    private int pages;//总页数
    private int pageSize;//页面大小
    private int currentSize;//当前页面记录数
    private List<T> list;//数据主体
    /**
    分页操作
    */
    public static <T> Page getPage(PageParam pageParam,QueryAction<T> queryAction) {
        //1.利用pagehelper执行分页
        PageHelper.startPage(pageParam);//mybatis映射器执行查询之前，pagehelper介入设置分页参数[pageName,pageSize等字段]（所以必须写，且写在映射器查询之前）
        //2.开始执行查询
        List<T> list = queryAction.executeQuery();
        //3.将pagehelper生成的分页数据进行转化为Page对象中定义的字段
        PageInfo<T> pageInfo = new PageInfo<>(list);//3.1获取分好页的对象
        Page page = new Page();//创建自己写的Page分页对象
        //3.2手动将pageInfo对象中的字段写入到page对象字段里
        page.setCurrent(pageInfo.getPageNum());
        page.setFirst(1);//首页肯定是1，不用取，直接硬编码
        page.setPre(pageInfo.getPrePage());
        page.setNext(pageInfo.getNextPage());
        page.setLast(pageInfo.getPages());
        page.setTotal((int)pageInfo.getTotal());
        page.setPages(pageInfo.getPages());
        page.setPageSize(pageInfo.getPageSize());
        page.setCurrentSize(pageInfo.getSize());//当前页的实际记录数
        page.setList(pageInfo.getList());//当前页的数据
        return page;
    } 
}
